// 相当于 utils
// app/extend/helper.js
const svgCaptcha = require('svg-captcha')
module.exports = {
	// 统一处理返回的数据格式
	success({ msg = '成功', code = 200, data = [], inserCount = 0 }) {
		this.ctx.body = {
			code,
			msg,
			data,
			inserCount,
		}
	},
	fail({ msg = '失败', code = 400 }) {
		this.ctx.body = {
			code,
			msg,
		}
	},
	// string 转化为 int
	toInt(str) {
		if (typeof str === 'number') return str
		if (!str) return str
		return parseInt(str, 10) || 0
	},
	/**
	 *树结构方法 递归方式
	 * @param {*} res 数组
	 */
	Tree(res) {
		function getChilder(data, id) {
			let arr = []
			for (const key in data) {
				if (data[key].pid == id) {
					data[key].children = []
					arr.push(data[key])
					data[key].children = getChilder(data, data[key].id)
				}
			}
			return arr
		}

		let trees = []
		res.forEach((item) => {
			if (item.pid == 0) {
				item.children = getChilder(res, item.id)
				trees.push(item)
			}
		})
		return trees
	},
	/**
	 *树结构方法 利用对象的key
	 * @param {*} res 数组
	 * map
	 */
	Tree2(data) {
		console.log(data)
		let menus = [] // 放置最终的结果
		let map = {}
		data.forEach((item) => {
			if (item.pid != null) {
				item.children = []
				map[item.id] = item
				if (item.pid === 0) {
					// 顶级
					menus.push(item)
				} else {
					// 把自己放到自己的父级的children中
					map[item.pid].children.push(item)
				}
			}
		})

		return menus
	},

	/**
	 * 生成验证码
	 */
	captche() {
		const { ctx } = this

		const captcha = svgCaptcha.create({
			size: 4, //图片验证码的字符数
			fontSize: 50,
			ignoreChars: 'Ooli', //忽略的一些字符
			width: 100,
			height: 40,
			noise: 2,
			color: true,
			background: '#ffffff',
		})
		ctx.session.captcha = captcha.text //text及data都是函数返回的string属性的对象  将图片验证码中的text传到session里边
		ctx.response.type = 'image/svg+xml' //返回的类型
		ctx.body = captcha.data //返回一张图片
	},
	/**
	 *
	 * @param {*} captcha
	 * @returns
	 * 验证验证码
	 */

	checkCaptche(captcha) {
		const { ctx } = this
		// let { captcha } = ctx.request.body
		let verify = ctx.session.captcha //获得session中的验证码
		console.log(captcha, verify)
		if (captcha.toUpperCase() != verify.toUpperCase()) {
			return { flag: false, msg: '验证码错误！' }
		}
		return { flag: true }
	},
}
